package org.example.toy;


import java.nio.ByteBuffer;

//熟悉ByteBuffer的小玩具
public class ByteBufferToy {

    public static void main(String[] args) {

        //分配一个容量为10的ByteBuffer
        ByteBuffer byteBuffer = ByteBuffer.allocate(10);

        //打印初始状态
        System.out.println("初始状态：" + byteBuffer);

        //写入数据
        byteBuffer.put((byte)1);
        byteBuffer.put((byte)2);
        byteBuffer.put((byte)3);

        System.out.println("写入数据后：" + byteBuffer);

        //切换为读模式
        byteBuffer.flip();
        System.out.println("切换为读模式后：" + byteBuffer);

        //读取数据
        while (byteBuffer.hasRemaining()){
            System.out.println(byteBuffer.remaining());
            System.out.println(byteBuffer.get()+"ss");
        }
        System.out.println("读取数据后：" + byteBuffer);

        //复用ByteBuffer
        byteBuffer.clear();
        System.out.println("复用ByteBuffer后：" + byteBuffer);

        //再次写入
        byteBuffer.put((byte)9);
        byteBuffer.flip();
        System.out.println("再次读取：" + byteBuffer.get());
        System.out.println(byteBuffer);

//        pos是本次操作的位置 lim是能操作的极限位置 cap是实际的容量
//        初始状态：java.nio.HeapByteBuffer[pos=0 lim=10 cap=10]
//        写入数据后：java.nio.HeapByteBuffer[pos=3 lim=10 cap=10]
//        切换为读模式后：java.nio.HeapByteBuffer[pos=0 lim=3 cap=10]
//        1
//        2
//        3
//        读取数据后：java.nio.HeapByteBuffer[pos=3 lim=3 cap=10]
//        复用ByteBuffer后：java.nio.HeapByteBuffer[pos=0 lim=10 cap=10]
//        再次读取：9
//        java.nio.HeapByteBuffer[pos=1 lim=1 cap=10]


    }
}
